package com.mini.grpc.loadbalance;

import java.net.SocketAddress;
import java.util.List;

/**
 * 负载均衡器接口
 * 负责在多个服务端实例之间分配请求
 * 
 * @author Mini-gRPC
 */
public interface LoadBalancer {
    
    /**
     * 选择一个服务端地址
     * 
     * @return 选中的服务端地址，如果没有可用地址返回null
     */
    SocketAddress choose();
    
    /**
     * 更新服务端地址列表
     * 
     * @param addresses 新的服务端地址列表
     */
    void updateAddresses(List<SocketAddress> addresses);
    
    /**
     * 获取当前所有服务端地址
     * 
     * @return 服务端地址列表
     */
    List<SocketAddress> getAddresses();
    
    /**
     * 获取负载均衡器名称
     * 
     * @return 负载均衡器名称
     */
    String getName();
    
    /**
     * 关闭负载均衡器
     * 释放相关资源
     */
    void shutdown();
    
    /**
     * 判断负载均衡器是否已关闭
     * 
     * @return 如果已关闭返回true
     */
    boolean isShutdown();
} 